/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package proyecto;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Date;

/**
 *
 * @author manuel.pena3
 */
public class GTD {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException, IOException {
        // TODO code application logic here
        int opcion = 0;

        Scanner op = new Scanner(System.in);
        Scanner aux;

        int mes, dia, ano;

        ArrayList<Tarea> listaTareas;

        // BASE DE DATOS
        Usuario usuario = new Usuario();
        ConexionBD.cargarDatosUsuarioBD(usuario);

        do {
            System.out.println("Menu");
            System.out.println("1 - Crear tarea");
            System.out.println("2 - Modificar tarea");
            System.out.println("3 - Eliminar tarea");
            System.out.println("4 - Crear proyecto");
            System.out.println("5 - Modificar proyecto");
            System.out.println("6 - Eliminar proyecto");
            System.out.println("7 - Importar tareas y proyectos");
            System.out.println("8 - Exportar tareas y proyectos");
            System.out.println("9 - Buscar tarea");
            System.out.println("10 - Ver tareas pendientes");
            System.out.println("11 - Ver tareas realizadas");
            System.out.println("12 - Obtener duracion media tareas");
            System.out.println("13 - Obtener duracion media proyectos");
            System.out.println("14 - Histograma dia semana");
            System.out.println("15 - Histograma mensual");
            System.out.println("16 - Tareas realizadas de proyectos activos");
            System.out.println("0 - Gardar e saír");
            System.out.print("Escolla unha opción: ");

            opcion = op.nextInt();

            switch (opcion) {
                case 1:
                    Tarea tarea = new Tarea();
                    aux = new Scanner(System.in);
                    System.out.println("Introducir nombre de la tarea");
                    tarea.setNome(aux.nextLine());

                    System.out.println("Fecha de Inicio");
                    System.out.println("Introducir Día");
                    dia = aux.nextInt();
                    System.out.println("Introducir Mes");
                    mes = aux.nextInt();
                    System.out.println("Introducir Año");
                    ano = aux.nextInt();
                    Date fecha = new Date(ano - 1900, mes, dia);
                    tarea.setFechaFin(fecha);

                    System.out.println("Introducir fecha de Fin");
                    System.out.println("Introducir Día");
                    dia = aux.nextInt();
                    System.out.println("Introducir Mes");
                    mes = aux.nextInt();
                    System.out.println("Introducir Año");
                    ano = aux.nextInt();
                    Date fechaFin = new Date(ano - 1900, mes, dia);
                    tarea.setFechaFin(fechaFin);

                    System.out.println("Introducir prioridad");
                    tarea.setPrioridad(aux.nextInt());

                    ArrayList<Usuario> usuarios = new ArrayList<>();
                    usuarios.add(usuario);
                    tarea.setResponsables(usuarios);

                    usuario.asignarTarea(tarea);

                    break;
                case 2:
                    listaTareas = usuario.getTareas();
                    aux = new Scanner(System.in);

                    if (!listaTareas.isEmpty()) {

                        System.out.println("Lista tareas");
                        for (int i = 0; i < listaTareas.size(); i++) {
                            System.out.println("Tarea: " + listaTareas.get(i).getNome());
                        }

                        System.out.println("Seleccionar Nombre Tarea");
                        int indice = 0;
                        String nombre = aux.nextLine();
                        for (int i = 0; i < listaTareas.size(); i++) {
                            if (listaTareas.get(i).getNome().equals(nombre)) {
                                indice = i;
                            }
                        }

                        System.out.println("Introducir fecha de Fin");
                        System.out.println("Introducir Día");
                        dia = aux.nextInt();
                        System.out.println("Introducir Mes");
                        mes = aux.nextInt();
                        System.out.println("Introducir Año");
                        ano = aux.nextInt();
                        Date fechaFin2 = new Date(ano - 1900, mes, dia);

                        listaTareas.get(indice).setFechaFin(fechaFin2);
                    }

                    break;
                case 3:
                    listaTareas = usuario.getTareas();
                    aux = new Scanner(System.in);
                    if (!listaTareas.isEmpty()) {

                        System.out.println("Lista tareas");
                        
                        
                        for (int i = 0; i < listaTareas.size(); i++) {
                            System.out.println("Tarea: " + listaTareas.get(i).getNome());
                        }

                        System.out.println("Seleccionar Nombre Tarea para eliminar");
                        int indice = 0;
                        String nombre = aux.nextLine();
                        for (int i = 0; i < listaTareas.size(); i++) {
                            if (listaTareas.get(i).getNome().equals(nombre)) {
                                indice = i;
                            }
                        }
//                        if (listaTareas.get(indice).getProyecto().getTareas().contains(listaTareas.get(indice))) {
//                            listaTareas.get(indice).getProyecto().getTareas().remove(listaTareas.get(indice));
//                        }

                        listaTareas.remove(indice);

                        usuario.setTareas(listaTareas);
                    }
                    break;
                case 4:
                    Proyecto proyecto = new Proyecto();
                    aux = new Scanner(System.in);
                    System.out.println("Introducir nombre del Proyecto");
                    proyecto.setNombre(aux.nextLine());

                    System.out.println("Fecha de Inicio");
                    System.out.println("Introducir Día");
                    dia = aux.nextInt();
                    System.out.println("Introducir Mes");
                    mes = aux.nextInt();
                    System.out.println("Introducir Año");
                    ano = aux.nextInt();
                    fecha = new Date(ano - 1900, mes, dia);
                    proyecto.setFechaFin(fecha);

                    System.out.println("Introducir fecha de Fin");
                    System.out.println("Introducir Día");
                    dia = aux.nextInt();
                    System.out.println("Introducir Mes");
                    mes = aux.nextInt();
                    System.out.println("Introducir Año");
                    ano = aux.nextInt();
                    fechaFin = new Date(ano - 1900, mes, dia);
                    proyecto.setFechaFin(fechaFin);

                    usuarios = new ArrayList<>();
                    usuarios.add(usuario);
                    proyecto.setResponsables(usuarios);

                    usuario.asignarProyecto(proyecto);

                    break;
                case 5:
                    ArrayList<Proyecto> listaProyectos = usuario.getProyectos();
                    aux = new Scanner(System.in);

                    if (!listaProyectos.isEmpty()) {

                        System.out.println("Lista Proyectos");
                        for (int i = 0; i < listaProyectos.size(); i++) {
                            System.out.println("Proyecto: " + listaProyectos.get(i).getNombre());
                        }

                        System.out.println("Seleccionar Nombre Proyecto");
                        int indice = 0;
                        String nombre = aux.nextLine();
                        for (int i = 0; i < listaProyectos.size(); i++) {
                            if (listaProyectos.get(i).getNombre().equals(nombre)) {
                                indice = i;
                            }
                        }

                        System.out.println("Introducir fecha de Fin");
                        System.out.println("Introducir Día");
                        dia = aux.nextInt();
                        System.out.println("Introducir Mes");
                        mes = aux.nextInt();
                        System.out.println("Introducir Año");
                        ano = aux.nextInt();
                        Date fechaFin2 = new Date(ano - 1900, mes, dia);

                        listaProyectos.get(indice).setFechaFin(fechaFin2);
                    }

                    break;
                case 6:
                    listaProyectos = usuario.getProyectos();
                    aux = new Scanner(System.in);
                    if (!listaProyectos.isEmpty()) {

                        System.out.println("Lista Proyectos");
                        for (int i = 0; i < listaProyectos.size(); i++) {
                            System.out.println("Tarea: " + listaProyectos.get(i).getNombre());
                        }

                        System.out.println("Seleccionar Nombre Proyecto para eliminar");
                        int indice = 0;
                        String nombre = aux.nextLine();
                        for (int i = 0; i < listaProyectos.size(); i++) {
                            if (listaProyectos.get(i).getNombre().equals(nombre)) {
                                indice = i;
                            }
                        }

                        for (Tarea tareaActual : listaProyectos.get(indice).getTareas()) {
                            tareaActual.setProyecto(null);
                        }

                        listaProyectos.remove(indice);

                        usuario.setProyectos(listaProyectos);
                    }
                    break;
                case 7:
                    aux = new Scanner(System.in);
                    System.out.println("Introduzca el nombre del archivo a importar");
                    LectorArchivo.leer(aux.nextLine(), usuario);
                    break;
                case 8:
                    aux = new Scanner(System.in);
                    System.out.println("Introduzca el nombre del archivo a exportar");
                    LectorArchivo.escribir(aux.nextLine(), usuario);
                    break;
                case 9:
                    aux = new Scanner(System.in);
                    System.out.println("Introduzca el nombre de la tarea a buscar");
                    int indiceBusqueda = Controlador.buscarTareas(usuario, aux.nextLine());
                    if (indiceBusqueda > -1) {
                        System.out.print("Nombre: " + usuario.getTareas().get(indiceBusqueda).getNome());
                        if (usuario.getTareas().get(indiceBusqueda).getProyecto() != null) {
                            System.out.print(", Proyecto: " + usuario.getTareas().get(indiceBusqueda).getProyecto().getNombre());
                        }
                        if (usuario.getTareas().get(indiceBusqueda).getPrioridad() != null) {
                            System.out.print(", Prioridad: " + usuario.getTareas().get(indiceBusqueda).getPrioridad());
                        }
                        System.out.println("\n");
                    } else {
                        System.out.println("No se encuentra la tarea");
                    }
                    break;
                case 10:
                    if (Controlador.verTareasPendientes(usuario) == null || Controlador.verTareasPendientes(usuario).isEmpty()) {
                        System.out.println("No existen tareas realizadas");
                        break;
                    }
                    for (Tarea tareaActual : Controlador.verTareasPendientes(usuario)) {
                        System.out.print("Nombre: " + tareaActual.getNome());
                        if (tareaActual.getProyecto() != null) {
                            System.out.print(", Proyecto: " + tareaActual.getProyecto().getNombre());
                        }
                        if (tareaActual.getPrioridad() != null) {
                            System.out.print(", Prioridad: " + tareaActual.getPrioridad());
                        }
                    }
                    System.out.println("\n");
                    break;
                case 11:
                    if (Controlador.verTareasRealizadas(usuario) == null || Controlador.verTareasRealizadas(usuario).isEmpty()) {
                        System.out.println("No existen tareas realizadas");
                        break;
                    }
                    for (Tarea tareaActual : Controlador.verTareasPendientes(usuario)) {
                        System.out.print("Nombre: " + tareaActual.getNome());
                        if (tareaActual.getProyecto() != null) {
                            System.out.print(", Proyecto: " + tareaActual.getProyecto().getNombre());
                        }
                        if (tareaActual.getPrioridad() != null) {
                            System.out.print(", Prioridad: " + tareaActual.getPrioridad());
                        }
                    }
                    System.out.println("\n");
                    break;
                case 12:
                    System.out.println("Duración media tareas: " + Estadistica.duracionMediaTareas(usuario) / 1000 / 60 / 60 / 24 + " dias");
                    break;
                case 13:
                    System.out.println("Duración media proyectos: " + Estadistica.duracionMediaProyectos(usuario) / 1000 / 60 / 60 / 24 + " dias");
                    break;
                case 14:
                    Estadistica.histogramaDiaSemana();
                    break;
                case 15:
                    Estadistica.histogramaDiaSemana();
                    break;
                case 16:
                    if (Estadistica.tareasRealizadasProyectosActivos(usuario) == null || Estadistica.tareasRealizadasProyectosActivos(usuario).isEmpty()) {
                        System.out.println("No existen tareas en los proyectos activos");
                        break;
                    }
                    for (Tarea tareaActual : Estadistica.tareasRealizadasProyectosActivos(usuario)) {
                        System.out.print("Nombre: " + tareaActual.getNome());
                        if (tareaActual.getProyecto() != null) {
                            System.out.print(", Proyecto: " + tareaActual.getProyecto().getNombre());
                        }
                        if (tareaActual.getPrioridad() != null) {
                            System.out.print(", Prioridad: " + tareaActual.getPrioridad());
                        }
                    }
                    System.out.println("\n");
                    break;
                default:
                    System.exit(0);
                    break;
            }
        } while (opcion != 0);

        // Guardar en la Base de datos
    }
}
